/**
 * Created with IntelliJ IDEA.
 * Description:Java类相关的知识
 * User: LianBao
 * Date: 2024-02-27
 * Time: 15:09
 */

class Date {
    public int year;
    public int month;
    public int day;

    //隐藏的this->public void setDate(Date this,int year, int month, int day)
    public void setDate(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public void show() {
        System.out.println(this.year + "-" + this.month + "-" + this.day);
    }
}

class Dog {
    //成员属性
    public String name;
    public int age;

    //方法
    public void eat() {
        System.out.println(this.name + "正在吃饭");
    }

    public void barks() {
        System.out.println(this.name + "正在汪汪叫");
    }

    //构造方法->  方法名 参数列表{}
    //构造方法没有返回值,名称和类名一样
    //如果自己没有写构造方法,编译器会默认提供一个;如果你自己写了构造方法,编译器就不会提供 不带参数的构造方法

    //构造方法也可以带参数
    //构造方法可以重载!!!

    //    public Dog() {
//        System.out.println("不带参数的构造方法");
//
//        //可以在构造方法中初始化成员变量
//        this.name = "大黄";
//        this.age = 20;
//    }
    public Dog() {
//        System.out.println();//报错,因为this()必须在第一行
        this("大黄", 20);//表示调用当前类中的其他构造方法
    }

    public Dog(String name, int age) {
        System.out.println("不带参数的构造方法");
//        this();不允许,this之间的调用不能形成环
        //可以在构造方法中初始化成员变量
        this.name = name;
        this.age = age;
    }
}

public class Test {
//    public static void main1(String[] args) {
//        Date date1 = new Date();
//        date1.setDate(2024, 2, 26);
//        date1.show();
//    }

    public static void main(String[] args) {
        Dog dog1 = new Dog();//new的同时,实际上会调用构造方法,此时没有参数,调用的是不带参数的构造方法
        dog1.age = 10;
        dog1.name = "大黄";
        dog1.eat();
        Dog dog2 = new Dog("小黑", 20);//
    }
}
